#pragma once

#include <vector>
#include <mutex>
#include "global.h"

// 配置项结构体
typedef struct _CConfItem{
	char ItemName[50];
	char ItemContent[500];
}CConfItem,*LPCConfItem;

class CConfig{
public:
    ~CConfig();
    static CConfig* GetInstance() 
	{	
		if(m_instance == nullptr)
		{
			std::lock_guard<std::mutex> lock(m_mutex);
			if(m_instance == nullptr)
			{					
				m_instance = new CConfig();
				static CGarhuishou cl; 
			}	
		}
		return m_instance;
	}
    // 内部类，用于延迟回收单例实例的内存
	class CGarhuishou 
	{
	public:				
		~CGarhuishou()
		{
			if (CConfig::m_instance)
			{						
				delete CConfig::m_instance;				
				CConfig::m_instance = nullptr;				
			}
		}
	};
    // 加载配置文件函数
    bool Load(const char *pconfName);
    // 根据配置项名称获取内容
	const char *GetString(const char *p_itemname);
    // 根据配置项名称获取转换为整形的内容
	int  GetIntDefault(const char *p_itemname,const int def);
    std::vector<LPCConfItem> m_ConfigItemList;// 存储配置项指针的容器
	
private:
    CConfig();
	CConfig(const CConfig&) = delete;// 禁用拷贝构造函数
	CConfig& operator=(const CConfig&) = delete;// 禁用拷贝赋值运算符
    static CConfig *m_instance;// 单例模式
	static std::mutex m_mutex;// 互斥锁
};